﻿using System;
using System.Text;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Globalization;
using AudiPyme.BLL;
using System.IO;
using System.Data;
using AudiPyme.DAL;
namespace AudiPyme.UI
{
    public partial class EmpresaNivMadurezDeseadoGest : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //Se muestran los parámetros que tenga la empresa en el nivel de madurez deseado
                String NombreUsuario = (String)Session["nombreUsuario"];
                int IdEmpresa = UsuariosFactory.EmpresaUsuario(NombreUsuario);
                if (IdEmpresa != 0)
                {
                    int NivelMadurezDeseado = EmpresasFactory.MadurezDeseadaEmpresa(IdEmpresa);
                    PanelDatos.Visible = true;
                    TxtImporte.Text = EmpresasFactory.FacturacionEmpresa(IdEmpresa).ToString();
                    TxtNombre.Text = EmpresasFactory.NombreEmpresa(IdEmpresa);
                    TxtSector.Text = EmpresasFactory.SectorEmpresa(IdEmpresa);
                    TxtTipoEmpresa.Text = EmpresasFactory.TipoEmpresaEmpresa(IdEmpresa);
                    TxtNumAsalariados.Text = EmpresasFactory.NumeroEmpleados(IdEmpresa);
                    String RespTIC = EmpresasFactory.RecogeRespuestasTIC(IdEmpresa);
                    if (RespTIC != "")
                    {
                        DeserializaRespuestasTIC(RespTIC);
                    }
                }
                else
                {
                    MuestraMensaje("El usuario " + NombreUsuario + "no esta asociado a una empresa");
                }
            }
        }

        //Método que sirve para deserializar las respuestas de las preguntas TIC a valores para rellenar
        //en los distintos dropdownlist
        private void DeserializaRespuestasTIC(String RespTIC)
        {
            for (int i = 0; i < RespTIC.Count(); i++)
            {
                char resp = RespTIC.ElementAt(i);
                RellenaRespTIC(i, resp);
            }
        }

        //Método que sirve para mostrar las respuestas de las preguntas TIC en el formulario de la página
        private void RellenaRespTIC(int posicion, char respuesta)
        {
            switch (posicion)
            {
                case 0:
                    if (respuesta.Equals('0'))
                        DdlPreg1.SelectedValue = "NO";
                    else
                        DdlPreg1.SelectedValue = "SI";
                    break;
                case 1:
                    if (respuesta.Equals('0'))
                        DdlPreg2.SelectedValue = "NO";
                    else
                        DdlPreg2.SelectedValue = "SI";
                    break;
                case 2:
                    if (respuesta.Equals('0'))
                        DdlPreg3.SelectedValue = "NO";
                    else
                        DdlPreg3.SelectedValue = "SI";
                    break;
                case 3:
                    if (respuesta.Equals('0'))
                        DdlPreg4.SelectedValue = "NO";
                    else
                        DdlPreg4.SelectedValue = "SI";
                    break;
                case 4:
                    if (respuesta.Equals('0'))
                        DdlPreg5.SelectedValue = "NO";
                    else
                        DdlPreg5.SelectedValue = "SI";
                    break;
                case 5:
                    if (respuesta.Equals('0'))
                        DdlPreg6.SelectedValue = "NO";
                    else
                        DdlPreg6.SelectedValue = "SI";
                    break;
            }
        }

        protected void BtnInsertar_Click(object sender, EventArgs e)
        {
            try
            {
                Page.Validate("ValidarFormulario");
                if (Page.IsValid)
                {
                    int NivelMadurezDeseadoEmpresa = 0;
                    //Recojo los valores correspondientes a sector y tipo de empresa a través del IdEmpresa
                    String nombreUsuario = (String)Session["nombreUsuario"];
                    int IdEmpresa = UsuariosFactory.EmpresaUsuario(nombreUsuario);
                    int IdSectorEmpresa, IdTipoEmpresa = 0;
                    int CifraNegocioEmpresa;
                    int.TryParse(TxtImporte.Text, out CifraNegocioEmpresa);
                    double PesoSectorTipoEmpresa, PesoCifraNegocio;
                    IdSectorEmpresa = EmpresasFactory.IdSectorEmpresa(IdEmpresa);
                    IdTipoEmpresa = EmpresasFactory.IdTipoEmpresaEmpresa(IdEmpresa);
                    //Recojo los pesos asociados a la empresa según sus características
                    //Tipo de Empresa y Sector en el que está
                    int NumeroAsalariados;
                    int.TryParse(TxtNumAsalariados.Text, out NumeroAsalariados);
                    PesoSectorTipoEmpresa = PesoSectorTipoEmpresaFactory.PesoEmpresaSectorTipoEmpresa(IdSectorEmpresa, IdTipoEmpresa, NumeroAsalariados);
                    //Peso de la empresa según Cifra de Negocio y el sector de la empresa
                    PesoCifraNegocio = PesoCifraNegocioFactory.PesoEmpresaCifraNegocio(IdSectorEmpresa, CifraNegocioEmpresa);
                    //Si ambos no han recogido el valor centinela -1.0 es que todo va bien y procedemos con el peso de las preguntas
                    //relacionadas con las TIC según el Tipo de Empresa y Sector de la misma
                    char[] RespuestasTIC = SerializaRespuestasTIC();
                    List<double> LPesosPreguntasTIC = RecogePesosRespuestasTIC(IdSectorEmpresa, IdTipoEmpresa);
                    NivelMadurezDeseadoEmpresa = EmpresasFactory.CalcularNivelMadurezDeseadaEmpresa(PesoSectorTipoEmpresa, PesoCifraNegocio, LPesosPreguntasTIC, IdEmpresa);
                    EmpresasFactory.InsertarCifraNegocioEmpresa(IdEmpresa, CifraNegocioEmpresa);
                    EmpresasFactory.InsertarNivelMadurezDeseado(IdEmpresa, NivelMadurezDeseadoEmpresa);
                    EmpresasFactory.InsertarNumeroAsalariados(IdEmpresa, NumeroAsalariados);
                    EmpresasFactory.InsertarRespuestasTIC(IdEmpresa, RespuestasTIC);
                    MuestraMensajeRedirige("Nivel de Madurez calculado correctamente", "EmpresaNivMadurezPrincipal");
                }
                else
                {
                    MuestraMensaje("El Nivel de Madurez no pudo ser Calculado al No pasar la validación de Datos");
                }
            }
            catch (Exception ex)
            {
                ex.ToString();
                MuestraMensaje("Error al calcular el Nivel de Madurez");
            }
        }

        //Método para recoger una lista con los pesos que otorga cada respuesta TIC (sólo otorga peso si la respuesta es positiva)
        private List<double> RecogePesosRespuestasTIC(int IdSectorEmpresa, int IdTipoEmpresa)
        {
            List<double> LPesosPreguntasTIC = new List<double>(6);
            double PesoPreg1 = 0.0, PesoPreg2 = 0.0, PesoPreg3 = 0.0, PesoPreg4 = 0.0, PesoPreg5 = 0.0, PesoPreg6 = 0.0;
            if (DdlPreg1.SelectedValue.Equals("SI"))
            {
                PesoPreg1 = PesoPreguntasTICFactory.PesoPregunta1(IdSectorEmpresa, IdTipoEmpresa);
            }
            if (DdlPreg2.SelectedValue.Equals("SI"))
            {
                PesoPreg2 = PesoPreguntasTICFactory.PesoPregunta2(IdSectorEmpresa, IdTipoEmpresa);
            }
            if (DdlPreg3.SelectedValue.Equals("SI"))
            {
                PesoPreg3 = PesoPreguntasTICFactory.PesoPregunta3(IdSectorEmpresa, IdTipoEmpresa);
            }
            if (DdlPreg4.SelectedValue.Equals("SI"))
            {
                PesoPreg4 = PesoPreguntasTICFactory.PesoPregunta4(IdSectorEmpresa, IdTipoEmpresa);
            }
            if (DdlPreg5.SelectedValue.Equals("SI"))
            {
                PesoPreg5 = PesoPreguntasTICFactory.PesoPregunta5(IdSectorEmpresa, IdTipoEmpresa);
            }
            if (DdlPreg6.SelectedValue.Equals("SI"))
            {
                PesoPreg6 = PesoPreguntasTICFactory.PesoPregunta6(IdSectorEmpresa, IdTipoEmpresa);
            }
            //Se añaden los pesos a la lista
            LPesosPreguntasTIC.Add(PesoPreg1);
            LPesosPreguntasTIC.Add(PesoPreg2);
            LPesosPreguntasTIC.Add(PesoPreg3);
            LPesosPreguntasTIC.Add(PesoPreg4);
            LPesosPreguntasTIC.Add(PesoPreg5);
            LPesosPreguntasTIC.Add(PesoPreg6);
            return LPesosPreguntasTIC;
        }

        //Método que sirve para formatear las respuestas de las preguntas de los controles en 1s y 0s para 
        //guardarlas posteriormente en la base de datos
        private char[] SerializaRespuestasTIC()
        {
            char[] RespuestasTIC = new char[6];
            if (DdlPreg1.SelectedValue.Equals("SI"))
            {
                RespuestasTIC[0] = '1';
            }
            else
            {
                RespuestasTIC[0] = '0';
            }

            if (DdlPreg2.SelectedValue.Equals("SI"))
            {
                RespuestasTIC[1] = '1';
            }
            else
            {
                RespuestasTIC[1] = '0';
            }
            if (DdlPreg3.SelectedValue.Equals("SI"))
            {
                RespuestasTIC[2] = '1';
            }
            else
            {
                RespuestasTIC[2] = '0';
            }
            if (DdlPreg4.SelectedValue.Equals("SI"))
            {
                RespuestasTIC[3] = '1';
            }
            else
            {
                RespuestasTIC[3] = '0';
            }
            if (DdlPreg5.SelectedValue.Equals("SI"))
            {
                RespuestasTIC[4] = '1';
            }
            else
            {
                RespuestasTIC[4] = '0';
            }
            if (DdlPreg6.SelectedValue.Equals("SI"))
            {
                RespuestasTIC[5] = '1';
            }
            else
            {
                RespuestasTIC[5] = '0';
            }
            return RespuestasTIC;
        }

        private void MuestraMensajeRedirige(string Mensaje, string Pagina)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            SB.Append("var Pagina='" + Pagina + ".aspx';var vers = navigator.appVersion;if(vers.indexOf('MSIE 7.0') != -1) { window.location=Pagina;} else{ window.location=Pagina; }");
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Success", SB.ToString(), true);
        }

        private void MuestraMensaje(string Mensaje)
        {
            StringBuilder SB = new StringBuilder();
            SB.Append("alert('");
            SB.Append(Mensaje.Replace("\n", "\\n").Replace("\r", "").Replace("'", "\\'"));
            SB.Append("');");
            //SB.Append("var vers = navigator.appVersion;if(vers.indexOf('MSIE 7.0') != -1) { window.location='EmpresaNivMadurezPrincipal.aspx';} else{ window.location='EmpresaNivMadurezPrincipal.aspx'; }");
            ScriptManager.RegisterStartupScript(this, this.GetType(), "Success", SB.ToString(), true);
        }
    }
}